using System;

using TrueCode.Core.Aspects;

namespace TrueCode.DependencyManager
{
  public interface IBuildSession
  {
    SessionAim SessionAim { get; set; }
    object Instance { get; set; }

    object Build();
    IBuildSession MakeCopy( [NotNull] Type aimType );
    IBuildSession MakeCopy( [NotNull] Type aimType, object settingKey );
    void ExecuteNextBuildAction();

    T GetService< T >() where T : class;
    T GetService< T >( object key ) where T : class;

    T GetDefaultService< T >( object key = null ) where T : class;
  }
}